home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2004 April / Gamestar_61_2004-04_dvdb.iso / DVDStar / Editace / hltp.exe / {app} / Source Code / VirtualDub / disasm / ia32.txt < prev    next >
Text File  |  2003-10-01  |  41KB  |  1,238 lines

  1. # IA-32 disassembly ruleset module for VirtualDub -- V1.04
  2. # By Avery Lee <phaeron@virtualdub.org>
  3. #
  4. # Based off of:
  5. #    Intel IA-32 Software Developer's Manual, Volume 2
  6. #    AMD 3DNow! Technology manual
  7. #    AMD Extensions to the 3DNow! and MMX Instruction Sets Manual
  8. #
  9. # This version supports MMX, SSE, SSE2, 3DNow!, and 3DNow! Professional
  10. # (Athlon) instruction set extensions.
  11. #
  12. # Known issues:
  13. #
  14. # * LOCK is printed as a separate instruction instead of a prefix.
  15. # * Pentium 4 branch hints aren't printed.
  16. # * Valid disassemblies are produced for some invalid instructions, like
  17. #   CMPXCHG8B EAX.
  18.  
  19. #--------------------------------------------------------------------------
  20. # Pattern format
  21. #
  22. # All patterns are composed of sequences of the following:
  23. #    [66], [67], [F2], [F3]        Prefix required
  24. #    [!s]                        Lack of segment offset required
  25. #    xx                            Single byte match (i.e. 0F)
  26. #    xx-xx                        Byte match with mask -- mask is determined
  27. #                                by XOR of two bytes (10-1E gives mask 0E)
  28. #    *                            Any byte
  29. #    ruleset                        Apply ruleset at current point
  30. #    :                            End of pattern and start of result string
  31. #
  32. # Patterns are matched from top to bottom in a ruleset; if two patterns
  33. # overlap, the first pattern wins.  If no pattern in a ruleset matches, the
  34. # search fails; this causes the parent rule to fail as well, continuing
  35. # the search one level up.  The last ruleset (the main ruleset) must never
  36. # fail.
  37. #
  38. # Masked byte compares (10-1E) need not compare on contiguous bitfields but
  39. # must match the full bitfield.  A 10-15 token doesn't match 10, 11, 12,
  40. # 13, and 14, but only 10, 11, 14, and 15.  To match all six bytes, two
  41. # rules should be used: either 10-13 + 14-15, or 16-17 + 10-17.
  42. #
  43. # If a ruleset call is prefixed by !, the submatch begins with the previous
  44. # source byte rather than the current one.  This is used when the register
  45. # field of a modrm byte selects the instruction as well and thus must be
  46. # matched in the parent rule, like some of the shift instruction encodings.
  47. #
  48. # A lone colon is valid and represents a pattern that consumes no bytes and
  49. # always matches.  Needless to say it must be last.  No path may exist from
  50. # the main ruleset that matches only blank rules, since it will cause the
  51. # disassembler to get stuck in a loop, since no bytes are ever consumed.
  52. #
  53. # All byte pattern rules place one byte onto the result stack; all ruleset
  54. # submatch tokens place both the first byte matched and their output string
  55. # onto the stack.  Result stacks are local to each rule, and no rule can
  56. # "see" the stacks of a submatch.
  57.  
  58. #--------------------------------------------------------------------------
  59. # Result format
  60. #
  61. # Result strings are composed of the following tokens:
  62. #    "xyz"                        Literal string
  63. #    $<n>[<bitfield>]<format>    Formatted argument (see below)
  64. #    $ap                            Addressing prefix (cs:, etc. or nothing)
  65. #    $p_66, $p_67, $p_f2, $p_f3    Set a prefix flag (no output)
  66. #    $p_cs, $p_ds, etc.            Set addressing prefix (no output)
  67. #
  68. # Formatted arguments take a value from the result stack and output them;
  69. # the argument number ranges from 1 to the number of values on the stack,
  70. # which is at least the number of pattern tokens.  The valid formatting
  71. # types are:
  72. #
  73. #        a/ha/la                    8/16/32-bit PC-relative offset
  74. #        o/ho/lo                    8/16/32-bit displacement
  75. #        r8                        8-bit register (AL, AH, BL, ...)
  76. #        r16                        16-bit register (AX, BX, CX, ...)
  77. #        r1632                    $r16 if 66 prefix flag is set, else $r32
  78. #        r32                        32-bit register (EAX, EBX, ECX, ...)
  79. #        rc                        Control register (CR0, CR1, ...)
  80. #        rd                        Debug register (DR0, DR1, ...)
  81. #        rf                        FPU stack register (st(0), st(1), ...)
  82. #        rm                        MMX register (MM0, MM1, ...)
  83. #        rmx                        $rx if 66 prefix flag is set, else $rm
  84. #        rs                        Segment register (CS, DS, ...)
  85. #        rx                        SSE register (XMM0, XMM1, ...)
  86. #        s                        string
  87. #        x/hx/lx                    8/16/32-bit hex constant
  88. #
  89. # Format arguments can also contain by a bitfield descriptor of the form
  90. # [a-b], where a is the LSB and b is the MSB of the bitfield to extract.
  91. # This is often used for modrm encodings to extract the register
  92. # argument, i.e. $2[3-5]r8.
  93. #
  94. # Some of the format types will attempt a symbol lookup, and print symbol
  95. # and offset as well if there is a match.  This includes $a, $ha, $la,
  96. # $lo, and $lx.
  97. #
  98. # If a result string produces no output, the disassembler loops back again
  99. # and reapplies the main ruleset, keeping the current state.  This is used
  100. # to handle prefixes without needlessly recursing and recopying output
  101. # strings.
  102.  
  103.  
  104. #--------------------------------------------------------------------------
  105. # Rulesets for shift-index-base (sib) addressing bytes
  106.  
  107. %sib
  108.  
  109. # xx10 0xxx -> no index
  110. 20-E7:                $1[0-2]r32
  111.  
  112. 00-3F:                $1[0-2]r32 "+" $1[3-5]r32
  113. 40-7F:                $1[0-2]r32 "+" $1[3-5]r32 "*2"
  114. 80-BF:                $1[0-2]r32 "+" $1[3-5]r32 "*4"
  115. C0-FF:                $1[0-2]r32 "+" $1[3-5]r32 "*8"
  116.  
  117. %sib00
  118. 25-E5 * * * *:        $2lx
  119. 05-3D * * * *:        $1[3-5]r32 "+" $2lx
  120. 45-7D * * * *:        $1[3-5]r32 "*2+" $2lx
  121. 85-BD * * * *:        $1[3-5]r32 "*4+" $2lx
  122. C5-FD * * * *:        $1[3-5]r32 "*8+" $2lx
  123. sib:                $2s
  124.  
  125. #--------------------------------------------------------------------------
  126. # Rulesets for mode-reg/mem (modrm) addressing bytes
  127.  
  128. %modrm_base32
  129. 04-3C sib00:        "[" $3s "]"
  130. 44-7C sib *:        "[" $3s $4o  "]"
  131. 84-BC sib * * * *:    "[" $3s $4lo "]"
  132.  
  133. 05-3D * * * *:        "[" $2lx "]"
  134. 00-3F:                "[" $1[0-2]r32 "]"
  135. 40-7F *:            "[" $1[0-2]r32 $2o "]"
  136. 80-BF * * * *:        "[" $1[0-2]r32 $2lo "]"
  137.  
  138. %modrm_base16
  139. 00-38:                "[bx+si]"
  140. 01-39:                "[bx+di]"
  141. 02-3A:                "[bp+si]"
  142. 03-3B:                "[bp+di]"
  143. 04-3C:                "[si]"
  144. 05-3D:                "[di]"
  145. 06-3E * *:            "[" $2hx "]"
  146. 07-3F:                "[bx]"
  147.  
  148. 40-78 *:            "[bx+si+" $2o "]"
  149. 41-79 *:            "[bx+di+" $2o "]"
  150. 42-7A *:            "[bp+si+" $2o "]"
  151. 43-7B *:            "[bp+di+" $2o "]"
  152. 44-7C *:            "[si+" $2o "]"
  153. 45-7D *:            "[di+" $2o "]"
  154. 46-7E *:            "[bp+" $2o "]"
  155. 47-7F *:            "[bx+" $2o "]"
  156.  
  157. 80-B8 *:            "[bx+si+" $2ho "]"
  158. 81-B9 *:            "[bx+di+" $2ho "]"
  159. 82-BA *:            "[bp+si+" $2ho "]"
  160. 83-BB *:            "[bp+di+" $2ho "]"
  161. 84-BC *:            "[si+" $2ho "]"
  162. 85-BD *:            "[di+" $2ho "]"
  163. 86-BE *:            "[bp+" $2ho "]"
  164. 87-BF *:            "[bx+" $2ho "]"
  165.  
  166. C0-FF:                $1r16
  167.  
  168. %modrm_base
  169. [67] modrm_base16:    $2s
  170. modrm_base32:        $2s
  171.  
  172. %modrm
  173. modrm_base:            $ap $2s
  174.  
  175. %modrm8
  176. C0-FF:                $1[0-2]r8
  177. modrm:                $2s
  178.  
  179. %modrm16
  180. C0-FF:                $1[0-2]r16
  181. modrm:                $2s
  182.  
  183. %modrm32
  184. C0-FF:                $1[0-2]r32
  185. modrm:                $2s
  186.  
  187. %modrm1632
  188. [66] C0-FF:            $1[0-2]r16
  189. C0-FF:                $1[0-2]r32
  190. modrm:                $2s
  191.  
  192. %modrm128
  193. C0-FF:                $1[0-2]rx
  194. modrm:                $2s
  195.  
  196. %modrm8d
  197. C0-FF:                $1[0-2]r8
  198. modrm_base:            $ap "byte ptr " $2s
  199.  
  200. %modrm16d
  201. C0-FF:                $1[0-2]r8
  202. modrm_base:            $ap "word ptr " $2s
  203.  
  204. %modrm32d
  205. C0-FF:                $1[0-2]r32
  206. modrm_base:            $ap "dword ptr " $2s
  207.  
  208. %modrm1632d
  209. C0-FF:                $1[0-2]r1632
  210. [66] modrm_base:    $ap "word ptr " $2s
  211. modrm_base:            $ap "dword ptr " $2s
  212.  
  213. %modrm32x
  214. C0-FF:                $1[0-2]rx
  215. modrm:                $2s
  216.  
  217. %modrm32m
  218. C0-FF:                $1[0-2]rm
  219. modrm:                $2s
  220.  
  221. %modrm3248d
  222. C0-FF:                $1[0-2]r1632
  223. [66] modrm_base:    $ap "dword ptr " $2s
  224. modrm_base:            $ap "fword ptr " $2s
  225.  
  226. %modrm48d
  227. C0-FF:                $1[0-2]r32
  228. modrm_base:            $ap "fword ptr " $2s
  229.  
  230. %modrm64d
  231. C0-FF:                $1[0-2]r32
  232. modrm_base:            $ap "qword ptr " $2s
  233.  
  234. %modrm64m
  235. C0-FF:                $1[0-2]rm
  236. modrm:                $2s
  237.  
  238. %modrm64x
  239. C0-FF:                $1[0-2]rx
  240. modrm:                $2s
  241.  
  242. %modrm64128
  243. [66] C0-FF:            $1[0-2]rx
  244. C0-FF:                $1[0-2]rm
  245. modrm:                $2s
  246.  
  247. %modrm80d
  248. modrm_base:            $ap "real80 ptr " $2s
  249.  
  250. #--------------------------------------------------------------------------
  251. # Rulesets for block moves
  252.  
  253. %blockb
  254. [67]:                " es:byte ptr [di], " $ap "byte ptr [si]"
  255. [!s]:                "b"
  256. :                    " es:byte ptr [edi], " $ap "byte ptr [esi]"
  257.  
  258. %blockw
  259. [66] [67]:            " es:word ptr [di], " $ap "word ptr [si]"
  260. [66] [!s]:            "w"
  261. [66]:                " es:word ptr [edi], " $ap "word ptr [esi]"
  262. [67]:                " es:dword ptr [di], " $ap "dword ptr [si]"
  263. [!s]:                "d"
  264. :                    " es:dword ptr [edi], " $ap "dword ptr [esi]"
  265.  
  266. #--------------------------------------------------------------------------
  267. # Rulesets for instructions beginning with 0F
  268.  
  269. %prefix_0F
  270. 00 00-C7 !modrm16d:    "sldt " $4s
  271. 00 08-CF !modrm16d:    "str " $4s
  272. 00 10-D7 !modrm16d:    "lldt " $4s
  273. 00 18-DF !modrm16d:    "ltr " $4s
  274. 00 20-E7 !modrm16d:    "verr " $4s
  275. 00 28-EF !modrm16d:    "verw " $4s
  276.  
  277. 01 00-C7 !modrm48d:    "sgdt " $4s
  278. 01 08-CF !modrm48d:    "sidt " $4s
  279. 01 10-D7 !modrm48d:    "lgdt " $4s
  280. 01 18-DF !modrm48d:    "lidt " $4s
  281. 01 20-E7 !modrm16d:    "smsw " $4s
  282. 01 30-F7 !modrm16d:    "lmsw " $4s
  283. 01 38-FF !modrm8d:    "invlpg " $4s
  284.  
  285. 02 modrm16d:        "lar " $2[3-5]rx ", " $3s
  286. 03 modrm16d:        "lsl " $2[3-5]rx ", " $3s
  287. 06:                "clts"
  288. 08:                "invd"
  289. 09:                "wbinvd"
  290. 0B:                "ud2"
  291.  
  292. 0D 00-C7 !modrm:    "prefetch " $4s                            # 3DNow!
  293. 0D 08-CF !modrm:    "prefetchw " $4s                        # 3DNow!
  294. 0E:                "femms"                                    # 3DNow!
  295.  
  296. 0F modrm64m 0C:    "pi2fw " $2[3-5]rm ", " $3s                # 3DNow! DSP Extensions
  297. 0F modrm64m 0D:    "pi2fd " $2[3-5]rm ", " $3s                # 3DNow!
  298. 0F modrm64m 1C:    "pf2iw " $2[3-5]rm ", " $3s                # 3DNow! DSP Extensions
  299. 0F modrm64m 1D:    "pf2id " $2[3-5]rm ", " $3s                # 3DNow!
  300. 0F modrm64m 8A:    "pfnacc " $2[3-5]rm ", " $3s            # 3DNow! DSP Extensions
  301. 0F modrm64m 8E:    "pfpnacc " $2[3-5]rm ", " $3s            # 3DNow! DSP Extensions
  302. 0F modrm64m 90:    "pfcmpge " $2[3-5]rm ", " $3s            # 3DNow!
  303. 0F modrm64m 94:    "pfmin " $2[3-5]rm ", " $3s                # 3DNow!
  304. 0F modrm64m 96:    "pfrcp " $2[3-5]rm ", " $3s                # 3DNow!
  305. 0F modrm64m 97:    "pfrsqrt " $2[3-5]rm ", " $3s            # 3DNow!
  306. 0F modrm64m 9A:    "pfsub " $2[3-5]rm ", " $3s                # 3DNow!
  307. 0F modrm64m 9E:    "pfadd " $2[3-5]rm ", " $3s                # 3DNow!
  308. 0F modrm64m A0:    "pfcmpgt " $2[3-5]rm ", " $3s            # 3DNow!
  309. 0F modrm64m A4:    "pfmax " $2[3-5]rm ", " $3s                # 3DNow!
  310. 0F modrm64m A6:    "pfrcpit1 " $2[3-5]rm ", " $3s            # 3DNow!
  311. 0F modrm64m A7:    "pfrsqit1 " $2[3-5]rm ", " $3s            # 3DNow!
  312. 0F modrm64m AA:    "pfsubr " $2[3-5]rm ", " $3s            # 3DNow!
  313. 0F modrm64m AE:    "pfacc " $2[3-5]rm ", " $3s                # 3DNow!
  314. 0F modrm64m B0:    "pfcmpeq " $2[3-5]rm ", " $3s            # 3DNow!
  315. 0F modrm64m B4:    "pfmul " $2[3-5]rm ", " $3s                # 3DNow!
  316. 0F modrm64m B6:    "pfrcpit2 " $2[3-5]rm ", " $3s            # 3DNow!
  317. 0F modrm64m B7:    "pmulhrw " $2[3-5]rm ", " $3s            # 3DNow!
  318. 0F modrm64m BB:    "pswapd " $2[3-5]rm ", " $3s            # 3DNow! DSP Extensions
  319. 0F modrm64m BF:    "pavgusb " $2[3-5]rm ", " $3s            # 3DNow!
  320.  
  321. [66] 10 modrm128:    "movupd " $2[3-5]rx ", " $3s        # SSE2
  322. [66] 11 modrm128:    "movupd " $3s ", " $2[3-5]rx        # SSE2
  323. [66] 12 modrm64x:    "movlpd " $2[3-5]rx ", " $3s        # SSE2
  324. [66] 13 modrm64x:    "movlpd " $3s ", " $2[3-5]rx        # SSE2
  325. [66] 14 modrm64x:    "unpcklpd" $2[3-5]rx ", " $3s        # SSE2
  326. [66] 15 modrm64x:    "unpckhpd" $2[3-5]rx ", " $3s        # SSE2
  327. [66] 16 modrm64x:    "movhpd " $2[3-5]rx ", " $3s        # SSE2
  328. [66] 17 modrm64x:    "movhpd " $3s ", " $2[3-5]rx        # SSE2
  329.  
  330. [F2] 10 modrm64x:        "movsd " $2[3-5]rx ", " $3s            # SSE2
  331. [F2] 11 modrm64x:        "movsd " $3s ", " $2[3-5]rx            # SSE2
  332.  
  333. 10 modrm128:            "movups " $2[3-5]rx ", " $3s        # SSE
  334. 11 modrm128:            "movups " $3s ", " $2[3-5]rx        # SSE
  335. 12 C0-FF:                "movhlps " $2[3-5]rx ", " $2[0-2]rx    # SSE
  336. 12 modrm64x:            "movlps " $2[3-5]rx ", " $3s        # SSE
  337. 13 modrm64x:            "movlps " $3s ", " $2[3-5]rx        # SSE
  338. 14 modrm64x:            "unpcklps" $2[3-5]rx ", " $3s        # SSE
  339. 15 modrm64x:            "unpckhps" $2[3-5]rx ", " $3s        # SSE
  340. 16 C0-FF:                "movlhps " $2[3-5]rx ", " $2[0-2]rx    # SSE
  341. 16 modrm64x:            "movhps " $2[3-5]rx ", " $3s        # SSE
  342. 17 modrm64x:            "movhps " $3s ", " $2[3-5]rx        # SSE
  343.  
  344. [F3] 10 modrm32x:        "movss " $2[3-5]rx ", " $3s            # SSE
  345. [F3] 11 modrm32x:        "movss " $3s ", " $2[3-5]rx            # SSE
  346.  
  347. 18 00-C0 !modrm:        "prefetchnta " $4s                        # MMX2
  348. 18 08-C8 !modrm:        "prefetcht0 " $4s                        # MMX2
  349. 18 10-D7 !modrm:        "prefetcht1 " $4s                        # MMX2
  350. 18 18-DF !modrm:        "prefetcht2 " $4s                        # MMX2
  351.  
  352. 20 C0-FF:        "mov " $2[0-2]r32 ", " $2[3-5]rc
  353. 21 C0-FF:        "mov " $2[0-2]r32 ", " $2[3-5]rd
  354. 22 C0-FF:        "mov " $2[3-5]rc ", " $2[0-2]r32
  355. 23 C0-FF:        "mov " $2[3-5]rd ", " $2[0-2]r32
  356.  
  357. [66] 28 modrm128:        "movapd " $2[3-5]rx ", " $3s
  358. [66] 29 modrm128:        "movapd " $3s ", " $2[3-5]rx
  359. [66] 2A modrm64m:        "cvtpi2pd " $2[3-5]rx ", " $3s
  360. [F2] 2A modrm32:            "cvtsi2sd " $2[3-5]rx ", " $3s
  361. [66] 2B modrm128:        "movntpd " $3s ", " $2[3-5]rx
  362. [66] 2C modrm64m:        "cvttpd2pi " $2[3-5]rm ", " $3s
  363. [F2] 2C modrm32x:        "cvttsd2si " $2[3-5]r32 ", " $3s
  364. [66] 2D modrm64x:        "cvtpd2pi " $2[3-5]rm ", " $3s
  365. [F2] 2D modrm32x:        "cvtsd2si " $2[3-5]r32 ", " $3s
  366. [66] 2E modrm32x:        "ucomisd " $2[3-5]rx ", " $3s
  367. [66] 2F modrm32x:        "comisd " $2[3-5]rx ", " $3s
  368.  
  369. 28 modrm128:        "movaps " $2[3-5]rx ", " $3s
  370. 29 modrm128:        "movaps " $3s ", " $2[3-5]rx
  371. 2A modrm64m:        "cvtpi2ps " $2[3-5]rx ", " $3s
  372. [F3] 2A modrm32:    "cvtsi2ss " $2[3-5]rx ", " $3s
  373. 2B modrm128:        "movntps " $3s ", " $2[3-5]rx
  374. 2C modrm64m:        "cvttps2pi " $2[3-5]rm ", " $3s
  375. [F3] 2C modrm32x:    "cvttss2si " $2[3-5]r32 ", " $3s
  376. 2D modrm64m:        "cvtps2pi " $2[3-5]rm ", " $3s
  377. [F3] 2D modrm32x:    "cvtss2si " $2[3-5]r32 ", " $3s
  378. 2E modrm32x:        "ucomiss " $2[3-5]rx ", " $3s
  379. 2F modrm32x:        "comiss " $2[3-5]rx ", " $3s
  380.  
  381. 30:                "wrmsr"
  382. 31:                "rdtsc"
  383. 32:                "rdmsr"
  384. 33:                "rdpmc"
  385. 34:                "sysenter"
  386. 35:                "sysexit"
  387.  
  388. 40 modrm32:        "cmovo " $2[3-5]r32 ", " $3s
  389. 41 modrm32:        "cmovno " $2[3-5]r32 ", " $3s
  390. 42 modrm32:        "cmovc " $2[3-5]r32 ", " $3s
  391. 43 modrm32:        "cmovnc " $2[3-5]r32 ", " $3s
  392. 44 modrm32:        "cmovz " $2[3-5]r32 ", " $3s
  393. 45 modrm32:        "cmovnz " $2[3-5]r32 ", " $3s
  394. 46 modrm32:        "cmovbe " $2[3-5]r32 ", " $3s
  395. 47 modrm32:        "cmova " $2[3-5]r32 ", " $3s
  396. 48 modrm32:        "cmovs " $2[3-5]r32 ", " $3s
  397. 49 modrm32:        "cmovns " $2[3-5]r32 ", " $3s
  398. 4A modrm32:        "cmovpe " $2[3-5]r32 ", " $3s
  399. 4B modrm32:        "cmovpo " $2[3-5]r32 ", " $3s
  400. 4C modrm32:        "cmovl " $2[3-5]r32 ", " $3s
  401. 4D modrm32:        "cmovge " $2[3-5]r32 ", " $3s
  402. 4E modrm32:        "cmovle " $2[3-5]r32 ", " $3s
  403. 4F modrm32:        "cmovg " $2[3-5]r32 ", " $3s
  404.  
  405. [66] 50 modrm32:        "movmskpd " $3s ", " $2[3-5]rx
  406. [66] 51 modrm128:    "sqrtpd "  $2[3-5]rx ", " $3s        # SSE2
  407. [66] 52 modrm128:    "rsqrtpd " $2[3-5]rx ", " $3s        # SSE2
  408. [66] 53 modrm128:    "rcppd "   $2[3-5]rx ", " $3s        # SSE2
  409. [66] 54 modrm128:    "andpd "   $2[3-5]rx ", " $3s        # SSE2
  410. [66] 55 modrm128:    "andnpd "  $2[3-5]rx ", " $3s        # SSE2
  411. [66] 56 modrm128:    "orpd "    $2[3-5]rx ", " $3s        # SSE2
  412. [66] 57 modrm128:    "xorpd "   $2[3-5]rx ", " $3s        # SSE2
  413. [66] 58 modrm128:    "addpd "   $2[3-5]rx ", " $3s        # SSE2
  414. [66] 59 modrm128:    "mulpd "   $2[3-5]rx ", " $3s        # SSE2
  415. [66] 5C modrm128:    "subpd "   $2[3-5]rx ", " $3s        # SSE2
  416. [66] 5D modrm128:    "minpd "   $2[3-5]rx ", " $3s        # SSE2
  417. [66] 5E modrm128:    "divpd "   $2[3-5]rx ", " $3s        # SSE2
  418. [66] 5F modrm128:    "maxpd "   $2[3-5]rx ", " $3s        # SSE2
  419.  
  420. [F2] 51 modrm64x:        "sqrtsd " $2[3-5]rx ", " $3s
  421. [F2] 52 modrm64x:        "rsqrtsd " $2[3-5]rx ", " $3s
  422. [F2] 53 modrm64x:        "rcpsd " $2[3-5]rx ", " $3s
  423. [F2] 58 modrm64x:        "addsd " $2[3-5]rx ", " $3s
  424. [F2] 59 modrm64x:        "mulsd " $2[3-5]rx ", " $3s
  425. [F2] 5C modrm64x:        "subsd " $2[3-5]rx ", " $3s
  426. [F2] 5D modrm64x:        "minsd " $2[3-5]rx ", " $3s
  427. [F2] 5E modrm64x:        "divsd " $2[3-5]rx ", " $3s
  428. [F2] 5F modrm64x:        "maxsd " $2[3-5]rx ", " $3s
  429.  
  430. 50 modrm32:            "movmskps " $3s ", " $2[3-5]rx
  431. 51 modrm128:            "sqrtps " $2[3-5]rx ", " $3s
  432. 52 modrm128:            "rsqrtps " $2[3-5]rx ", " $3s
  433. 53 modrm128:            "rcpps " $2[3-5]rx ", " $3s
  434. 54 modrm128:            "andps " $2[3-5]rx ", " $3s
  435. 55 modrm128:            "andnps " $2[3-5]rx ", " $3s
  436. 56 modrm128:            "orps " $2[3-5]rx ", " $3s
  437. 57 modrm128:            "xorps " $2[3-5]rx ", " $3s
  438. 58 modrm128:            "addps " $2[3-5]rx ", " $3s
  439. 59 modrm128:            "mulps " $2[3-5]rx ", " $3s
  440. 5C modrm128:            "subps " $2[3-5]rx ", " $3s
  441. 5D modrm128:            "minps " $2[3-5]rx ", " $3s
  442. 5E modrm128:            "divps " $2[3-5]rx ", " $3s
  443. 5F modrm128:            "maxps " $2[3-5]rx ", " $3s
  444.  
  445. [F3] 51 modrm32x:        "sqrtss " $2[3-5]rx ", " $3s
  446. [F3] 52 modrm32x:        "rsqrtss " $2[3-5]rx ", " $3s
  447. [F3] 53 modrm32x:        "rcpss " $2[3-5]rx ", " $3s
  448. [F3] 58 modrm32x:        "addss " $2[3-5]rx ", " $3s
  449. [F3] 59 modrm32x:        "mulss " $2[3-5]rx ", " $3s
  450. [F3] 5C modrm32x:        "subss " $2[3-5]rx ", " $3s
  451. [F3] 5D modrm32x:        "minss " $2[3-5]rx ", " $3s
  452. [F3] 5E modrm32x:        "divss " $2[3-5]rx ", " $3s
  453. [F3] 5F modrm32x:        "maxss " $2[3-5]rx ", " $3s
  454.  
  455. 60 modrm64128:        "punpcklbw " $2[3-5]rmx ", " $3s
  456. 61 modrm64128:        "punpcklwd " $2[3-5]rmx ", " $3s
  457. 62 modrm64128:        "punpcklqd " $2[3-5]rmx ", " $3s
  458. 63 modrm64128:        "packsswb "  $2[3-5]rmx ", " $3s
  459. 64 modrm64128:        "pcmpgtb "   $2[3-5]rmx ", " $3s
  460. 65 modrm64128:        "pcmpgtw "   $2[3-5]rmx ", " $3s
  461. 66 modrm64128:        "pcmpgtd "   $2[3-5]rmx ", " $3s
  462. 67 modrm64128:        "packuswb "  $2[3-5]rmx ", " $3s
  463. 68 modrm64128:        "punpckhbw " $2[3-5]rmx ", " $3s
  464. 69 modrm64128:        "punpckhwd " $2[3-5]rmx ", " $3s
  465. 6A modrm64128:        "punpckhdq " $2[3-5]rmx ", " $3s
  466. 6B modrm64128:        "packssdw "  $2[3-5]rmx ", " $3s
  467.  
  468. [66] 6C modrm128:        "punpcklqdq " $2[3-5]rx ", " $3s
  469. [66] 6D modrm128:        "punpckhqdq " $2[3-5]rx ", " $3s
  470. [66] 6E modrm32:            "movd " $2[3-5]rx ", " $3s
  471. [66] 6F modrm128:        "movdqa " $2[3-5]rx ", " $3s
  472. [F3] 6F modrm128:        "movdqu " $2[3-5]rx ", " $3s
  473.  
  474. 6E modrm32:        "movd " $2[3-5]rm ", " $3s
  475. 6F modrm64m:        "movq " $2[3-5]rm ", " $3s
  476.  
  477. [66] 70 modrm128 *:    "pshufd " $2[3-5]rx ", " $3s ", " $4x
  478. [F2] 70 modrm128 *:    "pshuflw " $2[3-5]rx ", " $3s ", " $4x
  479. [F3] 70 modrm128 *:    "pshufhw " $2[3-5]rx ", " $3s ", " $4x
  480. [F3] 7E modrm64x:    "movq " $2[3-5]rx ", " $3s                # SSE2
  481. [66] 7F modrm128:    "movdqa " $3s ", " $2[3-5]rx
  482. [F3] 7F modrm128:    "movdqu " $3s ", " $2[3-5]rx
  483.  
  484. [66] 73 D8-DF *:    "psrldq " $2[0-2]rx ", " $3x
  485. [66] 73 F8-FF *:    "pslldq " $2[0-2]rx ", " $3x
  486.  
  487. 70 modrm64m *:    "pshufw " $2[3-5]rm ", " $3s ", " $4x
  488. 71 D0-D7 *:        "psrlw " $2[0-2]rmx ", " $3x
  489. 71 E0-E7 *:        "psraw " $2[0-2]rmx ", " $3x
  490. 71 F0-F7 *:        "psllw " $2[0-2]rmx ", " $3x
  491. 72 D0-D7 *:        "psrld " $2[0-2]rmx ", " $3x
  492. 72 E0-E7 *:        "psrad " $2[0-2]rmx ", " $3x
  493. 72 F0-F7 *:        "pslld " $2[0-2]rmx ", " $3x
  494. 73 D0-D7 *:        "psrlq " $2[0-2]rmx ", " $3x
  495. 73 F0-F7 *:        "psllq " $2[0-2]rmx ", " $3x
  496. 74 modrm64128:    "pcmpeqb " $2[3-5]rmx ", " $3s
  497. 75 modrm64128:    "pcmpeqw " $2[3-5]rmx ", " $3s
  498. 76 modrm64128:    "pcmpeqd " $2[3-5]rmx ", " $3s
  499. 77:                "emms"
  500. 7E modrm32:        "movd " $3s ", " $2[3-5]rmx
  501. 7F modrm64m:        "movq " $3s ", " $2[3-5]rm
  502.  
  503. 80 * * * *:        "jo " $2la
  504. 81 * * * *:        "jno " $2la
  505. 82 * * * *:        "jc " $2la
  506. 83 * * * *:        "jnc " $2la
  507. 84 * * * *:        "jz " $2la
  508. 85 * * * *:        "jnz " $2la
  509. 86 * * * *:        "jbe " $2la
  510. 87 * * * *:        "ja " $2la
  511. 88 * * * *:        "js " $2la
  512. 89 * * * *:        "jns " $2la
  513. 8A * * * *:        "jpe " $2la
  514. 8B * * * *:        "jpo " $2la
  515. 8C * * * *:        "jl " $2la
  516. 8D * * * *:        "jge " $2la
  517. 8E * * * *:        "jle " $2la
  518. 8F * * * *:        "jg " $2la
  519.  
  520. 90 modrm8:        "seto " $3s
  521. 91 modrm8:        "setno " $3s
  522. 92 modrm8:        "setc " $3s
  523. 93 modrm8:        "setnc " $3s
  524. 94 modrm8:        "setz " $3s
  525. 95 modrm8:        "setnz " $3s
  526. 96 modrm8:        "setbe " $3s
  527. 97 modrm8:        "seta " $3s
  528. 98 modrm8:        "sets " $3s
  529. 99 modrm8:        "setns " $3s
  530. 9A modrm8:        "setpe " $3s
  531. 9B modrm8:        "setpo " $3s
  532. 9C modrm8:        "setl " $3s
  533. 9D modrm8:        "setge " $3s
  534. 9E modrm8:        "setle " $3s
  535. 9F modrm8:        "setg " $3s
  536.  
  537. A0:                "push fs"
  538. A1:                "pop fs"
  539. A2:                "cpuid"
  540. A3 modrm32:        "bt " $3s ", " $2[3-5]r32
  541. A4 modrm32 *:    "shld " $3s ", " $2[3-5]r32 ", " $4x
  542. A5 modrm32:        "shld " $3s ", " $2[3-5]r32 ", cl"
  543. A8:                "push gs"
  544. A9:                "pop gs"
  545. AA:                "rsm"
  546. AB modrm32:        "bts " $3s ", " $2[3-5]r32
  547. AC modrm32 *:    "shrd " $3s ", " $2[3-5]r32 ", " $4x
  548. AD modrm32:        "shrd " $3s ", " $2[3-5]r32 ", cl"
  549. AE 00-87 !modrm:    "fxsave " $4s
  550. AE 08-8F !modrm:    "fxrstor " $4s
  551. AE 10-97 !modrm:    "ldmxcsr " $4s
  552. AE 18-9F !modrm:    "stmxcsr " $4s
  553. AE 38-BF !modrm:    "clflush " $4s
  554. AE E8-EF:        "lfence" 
  555. AE F0-F7:        "mfence" 
  556. AE F8-FF:        "sfence" 
  557. AF modrm32:        "imul " $2[3-5]r32 ", " $3s
  558.  
  559. B0 modrm32:        "cmpxchg " $3s ", " $2[3-5]r32
  560. B1 modrm32:        "cmpxchg " $2[3-5]r32 ", " $3s
  561. B2 modrm48d:        "lss " $2[3-5]r32 ", " $3s
  562. B3 modrm32:        "btr " $3s ", " $2[3-5]r32
  563. B4 modrm48d:        "lfs " $2[3-5]r32 ", " $3s
  564. B5 modrm48d:        "lgs " $2[3-5]r32 ", " $3s
  565. B6 modrm8d:        "movzx " $2[3-5]r32 ", " $3s
  566. B7 modrm16d:        "movzx " $2[3-5]r32 ", " $3s
  567.  
  568. BA 20-E7 !modrm32d *:    "bt " $4s ", " $5x
  569. BA 28-EF !modrm32d *:    "bts " $4s ", " $5x
  570. BA 30-F7 !modrm32d *:    "btr " $4s ", " $5x
  571. BA 38-FF !modrm32d *:    "btc " $4s ", " $5x
  572. BB modrm32:                "btc " $3s ", " $2[3-5]r32
  573. BC modrm32:                "bsf " $2[3-5]r32 ", " $3s
  574. BD modrm32:                "bsr " $2[3-5]r32 ", " $3s
  575. BE modrm8d:                "movsx " $2[3-5]r32 ", " $3s
  576. BF modrm16d:                "movsx " $2[3-5]r32 ", " $3s
  577.  
  578. C0 modrm8:        "xadd " $3s ", " $2[3-5]r8
  579. C1 modrm32:        "xadd " $3s ", " $2[3-5]r32
  580.  
  581. [66] C2 modrm128 *:        "cmppd " $2[3-5]rx ", " $3s ", " $4x        # SSE2
  582. [F2] C2 modrm64x *:        "cmpsd " $2[3-5]rx ", " $3s ", " $4x        # SSE2
  583.  
  584. C2 modrm128 *:            "cmpps " $2[3-5]rx ", " $3s ", " $4x        # SSE
  585. [F3] C2 modrm32x *:        "cmpss " $2[3-5]rx ", " $3s ", " $4x        # SSE
  586.  
  587. C3 modrm32:            "movnti " $3s ", " $2[3-5]r32                    # SSE2
  588.  
  589. [66] C4 modrm32 *:        "pinsrw " $2[3-5]rx ", " $3s ", " $4x
  590. C4 modrm32 *:            "pinsrw " $2[3-5]rm ", " $3s ", " $4x
  591. [66] C5 C0-FF *:            "pextrw " $2[0-2]r32 ", " $2[3-5]rx ", " $3x
  592. C5 C0-FF *:                "pextrw " $2[0-2]r32 ", " $2[3-5]rm ", " $3x
  593. [66] C6 modrm128 *:    "shufpd " $2[3-5]rx ", " $3s ", " $4x
  594. C6 modrm128 *:        "shufps " $2[3-5]rx ", " $3s ", " $4x
  595. C7 08-8F !modrm64d:    "cmpxchg8b " $4s
  596. C8-CF:                "bswap " $1[0-2]r32
  597.  
  598. [66] D6 modrm64x:        "movq " $3s ", " $2[3-5]rx                            # SSE2
  599. [F2] D6 C0-FF:            "movdq2q " $2[0-2]rm ", " $2[3-5]rx                    # SSE2
  600. [F3] D6 C0-FF:            "movq2dq " $2[3-5]rx ", " $2[0-2]rm                    # SSE2
  601.  
  602. D1 modrm64128:        "psrlw " $2[3-5]rmx ", " $3s
  603. D2 modrm64128:        "psrld " $2[3-5]rmx ", " $3s
  604. D3 modrm64128:        "psrlq " $2[3-5]rmx ", " $3s
  605. D4 modrm64128:        "paddq " $2[3-5]rmx ", " $3s
  606. D5 modrm64128:        "pmullw " $2[3-5]rmx ", " $3s
  607. D7 C0-FF:            "pmovmskb " $2[3-5]r32 ", " $2[0-2]rmx
  608. D8 modrm64128:        "psubusb " $2[3-5]rmx ", " $3s
  609. D9 modrm64128:        "psubusw " $2[3-5]rmx ", " $3s
  610. DA modrm64128:        "pminub " $2[3-5]rmx ", " $3s
  611. DB modrm64128:        "pand " $2[3-5]rmx ", " $3s
  612. DC modrm64128:        "paddusb " $2[3-5]rmx ", " $3s
  613. DD modrm64128:        "paddusw " $2[3-5]rmx ", " $3s
  614. DE modrm64128:        "pmaxub " $2[3-5]rmx ", " $3s
  615. DF modrm64128:        "pandn " $2[3-5]rmx ", " $3s
  616.  
  617. E0 modrm64128:            "pavgb " $2[3-5]rmx ", " $3s
  618. E1 modrm64128:            "psraw " $2[3-5]rmx ", " $3s
  619. E2 modrm64128:            "psrad " $2[3-5]rmx ", " $3s
  620. E3 modrm64128:            "psraq " $2[3-5]rmx ", " $3s
  621. E4 modrm64128:            "pmulhuw " $2[3-5]rmx ", " $3s
  622. E5 modrm64128:            "pmulhw " $2[3-5]rmx ", " $3s
  623. [66] E7 modrm128:        "movntdq " $2[3-5]rx ", " $3s
  624. E7 modrm64m:            "movntq " $2[3-5]rm ", " $3s
  625. E8 modrm64128:            "psubsb " $2[3-5]rmx ", " $3s
  626. E9 modrm64128:            "psubsw " $2[3-5]rmx ", " $3s
  627. EA modrm64128:            "pminsw " $2[3-5]rmx ", " $3s
  628. EB modrm64128:            "por " $2[3-5]rmx ", " $3s
  629. EC modrm64128:            "paddsb " $2[3-5]rmx ", " $3s
  630. ED modrm64128:            "paddsw " $2[3-5]rmx ", " $3s
  631. EE modrm64128:            "pmaxsw " $2[3-5]rmx ", " $3s
  632. EF modrm64128:            "pxor " $2[3-5]rmx ", " $3s
  633.  
  634. F1 modrm64128:        "psllw " $2[3-5]rmx ", " $3s
  635. F2 modrm64128:        "pslld " $2[3-5]rmx ", " $3s
  636. F3 modrm64128:        "psllq " $2[3-5]rmx ", " $3s
  637. F4 modrm64128:        "pmuludq " $2[3-5]rmx ", " $3s
  638. F5 modrm64128:        "pmaddwd " $2[3-5]rmx ", " $3s
  639. F6 modrm64128:        "psadbw " $2[3-5]rmx ", " $3s
  640. [66] F7 modrm128:        "maskmovdqu " $2[3-5]rx ", " $3s
  641. F7 modrm64128:        "maskmovq " $2[3-5]rm ", " $3s
  642. F8 modrm64128:        "psubb " $2[3-5]rmx ", " $3s
  643. F9 modrm64128:        "psubw " $2[3-5]rmx ", " $3s
  644. FA modrm64128:        "psubd " $2[3-5]rmx ", " $3s
  645. FB modrm64128:        "psubq " $2[3-5]rmx ", " $3s
  646. FC modrm64128:        "paddb " $2[3-5]rmx ", " $3s
  647. FD modrm64128:        "paddw " $2[3-5]rmx ", " $3s
  648. FE modrm64128:        "paddd " $2[3-5]rmx ", " $3s
  649.  
  650. #--------------------------------------------------------------------------
  651. # Initial ruleset
  652.  
  653. %main
  654.  
  655. 00 modrm8:            "add " $3s ", " $2[3-5]r8
  656. 01 modrm1632:        "add " $3s ", " $2[3-5]r32
  657. 02 modrm8:            "add " $2[3-5]r8 ", " $3s
  658. 03 modrm1632:        "add " $2[3-5]r32 ", " $3s
  659. 04 *:                "add al, " $2x
  660. [66] 05 * *:        "add ax, " $2hx
  661. 05 * * * *:            "add eax, " $2lx
  662.  
  663. 06:                    "push es"
  664. 07:                    "pop es"
  665.  
  666. 08 modrm8:            "or " $3s ", " $2[3-5]r8
  667. 09 modrm1632:        "or " $3s ", " $2[3-5]r32
  668. 0A modrm8:            "or " $2[3-5]r8 ", " $3s
  669. 0B modrm1632:        "or " $2[3-5]r32 ", " $3s
  670. 0C *:                "or al, " $2x
  671. [66] 0D * *:        "or ax, " $2lx
  672. 0D * * * *:            "or eax, " $2lx
  673.  
  674. 0E:                    "push cs"
  675. 0F prefix_0F:        $3s
  676.  
  677. 10 modrm8:            "adc " $3s ", " $2[3-5]r8
  678. 11 modrm1632:        "adc " $3s ", " $2[3-5]r32
  679. 12 modrm8:            "adc " $2[3-5]r8 ", " $3s
  680. 13 modrm1632:        "adc " $2[3-5]r32 ", " $3s
  681. 14 *:                "adc al, " $2x
  682. [66] 15 * *:        "adc ax, " $2hx
  683. 15 * * * *:            "adc eax, " $2lx
  684.  
  685. 16:                    "push ss"
  686. 17:                    "pop ss"
  687.  
  688. 18 modrm8:            "sbb " $3s ", " $2[3-5]r8
  689. 19 modrm1632:        "sbb " $3s ", " $2[3-5]r32
  690. 1A modrm8:            "sbb " $2[3-5]r8 ", " $3s
  691. 1B modrm1632:        "sbb " $2[3-5]r32 ", " $3s
  692. 1C *:                "sbb al, " $2x
  693. [66] 1D * *:        "sbb ax, " $2hx
  694. 1D * * * *:            "sbb eax, " $2lx
  695.  
  696. 1E:                    "push ds"
  697. 1F:                    "pop ds"
  698.  
  699. 20 modrm8:            "and " $3s ", " $2[3-5]r8
  700. 21 modrm1632:        "and " $3s ", " $2[3-5]r32
  701. 22 modrm8:            "and " $2[3-5]r8 ", " $3s
  702. 23 modrm1632:        "and " $2[3-5]r32 ", " $3s
  703. 24 *:                "and al, " $2x
  704. [66] 25 * * * *:    "and ax, " $2hx
  705. 25 * * * *:            "and eax, " $2lx
  706.  
  707. 26:                    $p_es
  708. 27:                    "daa"
  709.  
  710. 28 modrm8:            "sub " $3s ", " $2[3-5]r8
  711. 29 modrm1632:        "sub " $3s ", " $2[3-5]r32
  712. 2A modrm8:            "sub " $2[3-5]r8 ", " $3s
  713. 2B modrm1632:        "sub " $2[3-5]r32 ", " $3s
  714. 2C *:                "sub al, " $2x
  715. [66] 2D * *:        "sub ax, " $2hx
  716. 2D * * * *:            "sub eax, " $2lx
  717.  
  718. 2E:                    $p_cs
  719. 2F:                    "das"
  720.  
  721. 30 modrm8:            "xor " $3s ", " $2[3-5]r8
  722. 31 modrm1632:        "xor " $3s ", " $2[3-5]r32
  723. 32 modrm8:            "xor " $2[3-5]r8 ", " $3s
  724. 33 modrm1632:        "xor " $2[3-5]r32 ", " $3s
  725. 34 *:                "xor al, " $2x
  726. [66] 35 * *:        "xor ax, " $2hx
  727. 35 * * * *:            "xor eax, " $2lx
  728.  
  729. 36:                    $p_ss
  730. 37:                    "aaa"
  731.  
  732. 38 modrm8:            "cmp " $3s ", " $2[3-5]r8
  733. 39 modrm32:            "cmp " $3s ", " $2[3-5]r32
  734. 3A modrm8:            "cmp " $2[3-5]r8 ", " $3s
  735. 3B modrm32:            "cmp " $2[3-5]r32 ", " $3s
  736. 3C *:                "cmp al, " $2x
  737. [66] 3D * *:        "cmp ax, " $2hx
  738. 3D * * * *:            "cmp eax, " $2lx
  739.  
  740. 3E:                    $p_ds
  741. 3F:                    "aas"
  742.  
  743. 40-47:                "inc " $1[0-2]r1632
  744. 48-4F:                "dec " $1[0-2]r1632
  745. 50-57:                "push " $1[0-2]r1632
  746. 58-5F:                "pop " $1[0-2]r1632
  747.  
  748. [66] 60:            "pusha"
  749. 60:                    "pushad"
  750. [66] 61:            "popa"
  751. 61:                    "popad"
  752. 62 modrm32:            "bound " $2[3-5]r32 "," $3s
  753. 63 modrm16:            "arpl " $3s ", " $2[3-5]r16
  754. 64:                    $p_fs
  755. 65:                    $p_gs
  756.  
  757. 66:                    $p_66
  758. 67:                    $p_67
  759.  
  760. [66] 68 * *:        "push " $2hx
  761. 68 * * * *:            "push " $2lx
  762. 69 modrm32 * * * *:    "imul " $2[3-5]r32 ", " $3s ", " $4lx
  763. 6A *:                "push " $2x
  764. 6B modrm32 *:        "imul " $2[3-5]r32 ", " $3s ", " $4x
  765. 6C:                    "insb"
  766. [66] 6D:            "insw"
  767. 6D:                    "insd"
  768. 6E:                    "outsb"
  769. [66] 6F:            "outsw"
  770. 6F:                    "outsd"
  771.  
  772. 70 *:                "jo " $2a
  773. 71 *:                "jno " $2a
  774. 72 *:                "jc " $2a
  775. 73 *:                "jnc " $2a
  776. 74 *:                "jz " $2a
  777. 75 *:                "jnz " $2a
  778. 76 *:                "jbe " $2a
  779. 77 *:                "ja " $2a
  780. 78 *:                "js " $2a
  781. 79 *:                "jns " $2a
  782. 7A *:                "jpe " $2a
  783. 7B *:                "jpo " $2a
  784. 7C *:                "jl " $2a
  785. 7D *:                "jge " $2a
  786. 7E *:                "jle " $2a
  787. 7F *:                "jg " $2a
  788.  
  789. 80      00-C7 !modrm8d *:                "add " $4s ", " $5x
  790. [66] 81 00-C7 !modrm16d * *:            "add " $4s ", " $5hx
  791. 81      00-C7 !modrm32d * * * *:        "add " $4s ", " $5lx
  792. 82-83   00-C7 !modrm1632d *:            "add " $4s ", " $5x
  793. 80      08-CF !modrm8d *:                "or "  $4s ", " $5x
  794. [66] 81 08-CF !modrm16d * *:            "or "  $4s ", " $5hx
  795. 81      08-CF !modrm32d * * * *:        "or "  $4s ", " $5lx
  796. 82-83   08-CF !modrm1632d *:            "or "  $4s ", " $5x
  797. 80      10-D7 !modrm8d *:                "adc " $4s ", " $5x
  798. [66] 81 10-D7 !modrm16d * *:            "adc " $4s ", " $5hx
  799. 81      10-D7 !modrm32d * * * *:        "adc " $4s ", " $5lx
  800. 82-83   10-D7 !modrm1632d *:            "adc " $4s ", " $5x
  801. 80      18-DF !modrm8d *:                "sbb " $4s ", " $5x
  802. [66] 81 18-DF !modrm16d * *:            "sbb " $4s ", " $5hx
  803. 81      18-DF !modrm32d * * * *:        "sbb " $4s ", " $5lx
  804. 82-83   18-DF !modrm1632d *:            "sbb " $4s ", " $5x
  805. 80      20-E7 !modrm8d *:                "and " $4s ", " $5x
  806. [66] 81 20-E7 !modrm16d * *:            "and " $4s ", " $5hx
  807. 81      20-E7 !modrm32d * * * *:        "and " $4s ", " $5lx
  808. 82-83   20-E7 !modrm1632d *:            "and " $4s ", " $5x
  809. 80      28-EF !modrm8d *:                "sub " $4s ", " $5x
  810. [66] 81 28-EF !modrm16d * *:            "sub " $4s ", " $5hx
  811. 81      28-EF !modrm32d * * * *:        "sub " $4s ", " $5lx
  812. 82-83   28-EF !modrm1632d *:            "sub " $4s ", " $5x
  813. 80      30-F7 !modrm8d *:                "xor " $4s ", " $5x
  814. [66] 81 30-F7 !modrm16d * *:            "xor " $4s ", " $5hx
  815. 81      30-F7 !modrm32d * * * *:        "xor " $4s ", " $5lx
  816. 82-83   30-F7 !modrm1632d *:            "xor " $4s ", " $5x
  817. 80      38-FF !modrm8d *:                "cmp " $4s ", " $5x
  818. [66] 81 38-FF !modrm16d * *:            "cmp " $4s ", " $5hx
  819. 81      38-FF !modrm32d * * * *:        "cmp " $4s ", " $5lx
  820. 82-83   38-FF !modrm1632d *:            "cmp " $4s ", " $5x
  821.  
  822. 84 modrm8:            "test " $3s ", " $2[3-5]r8
  823. 85 modrm1632:        "test " $3s ", " $2[3-5]r1632
  824. 86 modrm8:            "xchg " $3s ", " $2[3-5]r8
  825. 87 modrm1632:        "xchg " $3s ", " $2[3-5]r1632
  826. 88 modrm8:            "mov " $3s ", " $2[3-5]r8
  827. 89 modrm1632:        "mov " $3s ", " $2[3-5]r1632
  828. 8A modrm8:            "mov " $2[3-5]r8 ", " $3s
  829. 8B modrm1632:        "mov " $2[3-5]r1632 ", " $3s
  830. 8C modrm16:            "mov " $3s ", " $2[3-5]rs
  831.  
  832. 8D modrm1632:        "lea " $2[3-5]r1632 ", " $3s
  833. 8E modrm16:            "mov " $2[3-5]rs ", " $3s
  834. 8F modrm1632d:        "pop " $3s
  835.  
  836. [F3] 90:                "pause"
  837. 90:                        "nop"
  838. [66] 90-97:                "xchg ax, " $1[0-3]r16
  839. 90-97:                    "xchg eax, " $1[0-3]r32
  840. [66] 98:                "cwd"
  841. 98:                        "cwde"
  842. 99:                        "cdq"
  843. [67] 9A * * * *:        "call " $2hx ":" $4hx
  844. 9A * * * * * *:            "call " $2lx ":" $6hx
  845. 9B:                        "wait"
  846. [66] 9C:                "pushf"
  847. 9C:                        "pushfd"
  848. [66] 9D:                "popf"
  849. 9D:                        "popfd"
  850. 9E:                        "sahf"
  851. 9F:                        "lahf"
  852.  
  853. [67] A0 * *:        "mov al, " $ap "[" $2hx "]"
  854. A0 * * * *:            "mov al, " $ap "[" $2lx "]"
  855.  
  856. [66] [67] A1 * *:    "mov ax, " $ap "[" $2hx "]"
  857. [66] A1 * * * *:    "mov ax, " $ap "[" $2lx "]"
  858. [67] A1 * *:        "mov eax, " $ap "[" $2hx "]"
  859. A1 * * * *:            "mov eax, " $ap "[" $2lx "]"
  860.  
  861. [66] A2 * *:        "mov " $ap "[" $2hx "], al"
  862. A2 * * * *:            "mov " $ap "[" $2lx "], al"
  863.  
  864. [67] [66] A3 * *:    "mov " $ap "[" $2hx "], ax"
  865. [66] A3 * * * *:    "mov " $ap "[" $2lx "], ax"
  866. [67] A3 * *:        "mov " $ap "[" $2hx "], eax"
  867. A3 * * * *:            "mov " $ap "[" $2lx "], eax"
  868.  
  869. [F2] A6 blockb:        "repne cmps " $3s
  870. [F2] A7 blockw:        "repne cmps " $3s
  871. [F2] AE blockb:        "repne scas " $3s
  872. [F2] AF blockw:        "repne scas " $3s
  873.  
  874. [F3] A4 blockb:        "rep movs" $3s
  875. [F3] A5 blockw:        "rep movs" $3s
  876. [F3] A6 blockb:        "repe cmps" $3s
  877. [F3] A7 blockw:        "repe cmps" $3s
  878. [F3] AA blockb:        "rep stos" $3s
  879. [F3] AB blockw:        "rep stos" $3s
  880. [F3] AC blockb:        "rep lods" $3s
  881. [F3] AD blockw:        "rep lods" $3s
  882. [F3] AE blockb:        "repe scas" $3s
  883. [F3] AF blockw:        "repe scas" $3s
  884.  
  885. A4 blockb:            "movs" $3s
  886. A5 blockw:            "movs" $3s
  887. A6 blockb:            "cmps" $3s
  888. A7 blockw:            "cmps" $3s
  889. A8 *:                "test al, " $2x
  890. [66] A9 * *:        "test ax, " $2hx
  891. A9 * * * *:            "test eax, " $2lx
  892. AA blockb:            "stos" $3s
  893. AB blockw:            "stos" $3s
  894. AC blockb:            "lods" $3s
  895. AD blockw:            "lods" $3s
  896. AE blockb:            "scas" $3s
  897. AF blockw:            "scas" $3s
  898.  
  899. B0-B7 *:            "mov " $1[0-2]r8 ", " $2x
  900. [66] B8-BF * *:        "mov " $1[0-2]r16 ", " $2hx
  901. B8-BF * * * *:        "mov " $1[0-2]r32 ", " $2lx
  902.  
  903. C0 00-C7 !modrm8d *:        "rol " $4s ", " $5x
  904. C1 00-C7 !modrm1632d *:        "rol " $4s ", " $5x
  905. C0 08-CF !modrm8d *:        "ror " $4s ", " $5x
  906. C1 08-CF !modrm1632d *:        "ror " $4s ", " $5x
  907. C0 10-D7 !modrm8d *:        "rcl " $4s ", " $5x
  908. C1 10-D7 !modrm1632d *:        "rcl " $4s ", " $5x
  909. C0 18-DF !modrm8d *:        "rcr " $4s ", " $5x
  910. C1 18-DF !modrm1632d *:        "rcr " $4s ", " $5x
  911. C0 20-E7 !modrm8d *:        "shl " $4s ", " $5x
  912. C1 20-E7 !modrm1632d *:        "shl " $4s ", " $5x
  913. C0 28-EF !modrm8d *:        "shr " $4s ", " $5x
  914. C1 28-EF !modrm1632d *:        "shr " $4s ", " $5x
  915. C0 38-FF !modrm8d *:        "sar " $4s ", " $5x
  916. C1 38-FF !modrm1632d *:        "sar " $4s ", " $5x
  917.  
  918. C2 * *:                    "ret " $2hx
  919. C3:                        "ret"
  920. C4 modrm3248d:            "les " $2[3-5]r32 ", " $3s
  921. C5 modrm3248d:            "lds " $2[3-5]r32 ", " $3s
  922. C6 modrm8d *:            "mov " $3s ", " $4x
  923. [66] C7 modrm16d * *:    "mov " $3s ", " $4hx
  924. C7 modrm32d * * * *:    "mov " $3s ", " $4lx
  925. C8 * * *:                "enter " $2hx ", " $4x
  926. C9:                        "leave"
  927. CA * *:                    "retf " $2hx
  928. CB:                        "retf"
  929. CC:                        "int 3"
  930. CD *:                    "int " $2x
  931. CE:                        "into"
  932. [66] CF:                "iret"
  933. CF:                        "iretd"
  934.  
  935. D0 00-C7 !modrm8d:        "rol " $4s ", 1"
  936. D0 08-CF !modrm8d:        "ror " $4s ", 1"
  937. D0 10-D7 !modrm8d:        "rcl " $4s ", 1"
  938. D0 18-DF !modrm8d:        "rcr " $4s ", 1"
  939. D0 20-E7 !modrm8d:        "shl " $4s ", 1"
  940. D0 28-EF !modrm8d:        "shr " $4s ", 1"
  941. D0 38-FF !modrm8d:        "sar " $4s ", 1"
  942. D1 00-C7 !modrm1632d:    "rol " $4s ", 1"
  943. D1 08-CF !modrm1632d:    "ror " $4s ", 1"
  944. D1 10-D7 !modrm1632d:    "rcl " $4s ", 1"
  945. D1 18-DF !modrm1632d:    "rcr " $4s ", 1"
  946. D1 20-E7 !modrm1632d:    "shl " $4s ", 1"
  947. D1 28-EF !modrm1632d:    "shr " $4s ", 1"
  948. D1 38-FF !modrm1632d:    "sar " $4s ", 1"
  949. D2 00-C7 !modrm8d:        "rol " $4s ", cl"
  950. D2 08-CF !modrm8d:        "ror " $4s ", cl"
  951. D2 10-D7 !modrm8d:        "rcl " $4s ", cl"
  952. D2 18-DF !modrm8d:        "rcr " $4s ", cl"
  953. D2 20-E7 !modrm8d:        "shl " $4s ", cl"
  954. D2 28-EF !modrm8d:        "shr " $4s ", cl"
  955. D2 38-FF !modrm8d:        "sar " $4s ", cl"
  956. D3 00-C7 !modrm1632d:    "rol " $4s ", cl"
  957. D3 08-CF !modrm1632d:    "ror " $4s ", cl"
  958. D3 10-D7 !modrm1632d:    "rcl " $4s ", cl"
  959. D3 18-DF !modrm1632d:    "rcr " $4s ", cl"
  960. D3 20-E7 !modrm1632d:    "shl " $4s ", cl"
  961. D3 28-EF !modrm1632d:    "shr " $4s ", cl"
  962. D3 38-FF !modrm1632d:    "sar " $4s ", cl"
  963.  
  964. D4 *:                    "aam " $2x
  965. D5 *:                    "aad " $2x
  966. D6:                        "salc"
  967. D7:                        "xlatb"
  968.  
  969. D8 00-47 !modrm32d:        "fadd " $4s
  970. D8 80-87 !modrm32d:        "fadd " $4s
  971. D8 08-4F !modrm32d:        "fmul " $4s
  972. D8 88-8F !modrm32d:        "fmul " $4s
  973. D8 10-57 !modrm32d:        "fcom " $4s
  974. D8 90-97 !modrm32d:        "fcom " $4s
  975. D8 18-5F !modrm32d:        "fcomp " $4s
  976. D8 98-9F !modrm32d:        "fcomp " $4s
  977. D8 20-67 !modrm32d:        "fsub " $4s
  978. D8 A0-A7 !modrm32d:        "fsub " $4s
  979. D8 28-6F !modrm32d:        "fsubr " $4s
  980. D8 A8-AF !modrm32d:        "fsubr " $4s
  981. D8 30-77 !modrm32d:        "fdiv " $4s
  982. D8 B0-B7 !modrm32d:        "fdiv " $4s
  983. D8 38-7F !modrm32d:        "fdivr " $4s
  984. D8 B8-BF !modrm32d:        "fdivr " $4s
  985. D8 C0-C7:                "fadd st, " $2[0-2]rf
  986. D8 C8-CF:                "fmul st, " $2[0-2]rf
  987. D8 D0-D7:                "fcom st, " $2[0-2]rf
  988. D8 D8-DF:                "fcomp st, " $2[0-2]rf
  989. D8 E0-E7:                "fsub st, " $2[0-2]rf
  990. D8 E8-EF:                "fsubr st, " $2[0-2]rf
  991. D8 F0-F7:                "fdiv st, " $2[0-2]rf
  992. D8 F8-FF:                "fdivr st, " $2[0-2]rf
  993.  
  994. D9 00-47 !modrm32d:        "fld " $4s
  995. D9 80-87 !modrm32d:        "fld " $4s
  996. D9 10-57 !modrm32d:        "fst " $4s
  997. D9 90-97 !modrm32d:        "fst " $4s
  998. D9 18-5F !modrm32d:        "fstp " $4s
  999. D9 98-9F !modrm32d:        "fstp " $4s
  1000. D9 20-67 !modrm:        "fldenv " $4s
  1001. D9 A0-A7 !modrm:        "fldenv " $4s
  1002. D9 28-6F !modrm16:        "fldcw " $4s
  1003. D9 A8-AF !modrm16:        "fldcw " $4s
  1004. D9 30-77 !modrm:        "fstenv " $4s
  1005. D9 B0-B7 !modrm:        "fstenv " $4s
  1006. D9 38-7F !modrm32:        "fstcw " $4s
  1007. D9 B8-BF !modrm32:        "fstcw " $4s
  1008. D9 C0-C7:                "fld " $2[0-2]rf
  1009. D9 C8-CF:                "fxch " $2[0-2]rf
  1010. D9 D0:                    "fnop"
  1011. D9 E0:                    "fchs"
  1012. D9 E1:                    "fabs"
  1013. D9 E4:                    "ftst"
  1014. D9 E5:                    "fxam"
  1015.  
  1016. D9 E8:                    "fld1"
  1017. D9 E9:                    "fldl2t"
  1018. D9 EA:                    "fldl2e"
  1019. D9 EB:                    "fldpi"
  1020. D9 EC:                    "fldlg2"
  1021. D9 ED:                    "fldln2"
  1022. D9 EE:                    "fldz"
  1023.  
  1024. D9 F0:                    "f2xm1"
  1025. D9 F1:                    "fyl2x"
  1026. D9 F2:                    "fptan"
  1027. D9 F3:                    "fpatan"
  1028. D9 F4:                    "fxtract"
  1029. D9 F5:                    "fprem1"
  1030. D9 F6:                    "fdecstp"
  1031. D9 F7:                    "fincstp"
  1032.  
  1033. D9 F8:                    "fprem"
  1034. D9 F9:                    "fyl2xp1"
  1035. D9 FA:                    "fsqrt"
  1036. D9 FB:                    "fsincos"
  1037. D9 FC:                    "frndint"
  1038. D9 FD:                    "fscale"
  1039. D9 FE:                    "fsin"
  1040. D9 FF:                    "fcos"
  1041.  
  1042. DA 00-47 !modrm32d:        "fiadd " $4s
  1043. DA 80-87 !modrm32d:        "fiadd " $4s
  1044. DA 08-4F !modrm32d:        "fimul " $4s
  1045. DA 88-8F !modrm32d:        "fimul " $4s
  1046. DA 10-57 !modrm32d:        "ficom " $4s
  1047. DA 90-97 !modrm32d:        "ficom " $4s
  1048. DA 18-5F !modrm32d:        "ficomp " $4s
  1049. DA 98-9F !modrm32d:        "ficomp " $4s
  1050. DA 20-67 !modrm32d:        "fisub " $4s
  1051. DA A0-A7 !modrm32d:        "fisub " $4s
  1052. DA 28-6F !modrm32d:        "fisubr " $4s
  1053. DA A8-AF !modrm32d:        "fisubr " $4s
  1054. DA 30-77 !modrm32d:        "fidiv " $4s
  1055. DA B0-B7 !modrm32d:        "fidiv " $4s
  1056. DA 38-7F !modrm32d:        "fidivr " $4s
  1057. DA B8-BF !modrm32d:        "fidivr " $4s
  1058. DA C0-C7:                "fcmovb st, " $2[0-2]rf
  1059. DA C8-CF:                "fcmove st, " $2[0-2]rf
  1060. DA D0-D7:                "fcmovbe st, " $2[0-2]rf
  1061. DA D8-DF:                "fcmovu st, " $2[0-2]rf
  1062. DA E1:                    "fucompp"
  1063.  
  1064. DB 00-47 !modrm32d:        "fild " $4s
  1065. DB 80-87 !modrm32d:        "fild " $4s
  1066. DB 10-57 !modrm32d:        "fist " $4s
  1067. DB 90-97 !modrm32d:        "fist " $4s
  1068. DB 18-5F !modrm32d:        "fistp " $4s
  1069. DB 98-9F !modrm32d:        "fistp " $4s
  1070. DB 28-6F !modrm80d:        "fld " $4s
  1071. DB A8-AF !modrm80d:        "fld " $4s
  1072. DB 38-7F !modrm80d:        "fstp " $4s
  1073. DB B8-BF !modrm80d:        "fstp " $4s
  1074. DB C0-C7:                "fcmovnb st, " $2[0-2]rf
  1075. DB C8-CF:                "fcmovne st, " $2[0-2]rf
  1076. DB D0-D7:                "fcmovnbe st, " $2[0-2]rf
  1077. DB E2:                    "fclex"
  1078. DB E3:                    "finit"
  1079. DB E8-EF:                "fucomi st, " $2[0-2]rf
  1080. DB F0-F7:                "fcomi st, " $2[0-2]rf
  1081.  
  1082. DC 00-47 !modrm64d:        "fadd " $4s
  1083. DC 80-87 !modrm64d:        "fadd " $4s
  1084. DC 08-4F !modrm64d:        "fmul " $4s
  1085. DC 88-8F !modrm64d:        "fmul " $4s
  1086. DC 10-57 !modrm64d:        "fcom " $4s
  1087. DC 90-97 !modrm64d:        "fcom " $4s
  1088. DC 18-5F !modrm64d:        "fcomp " $4s
  1089. DC 98-9F !modrm64d:        "fcomp " $4s
  1090. DC 20-67 !modrm64d:        "fsub " $4s
  1091. DC A0-A7 !modrm64d:        "fsub " $4s
  1092. DC 28-6F !modrm64d:        "fsubr " $4s
  1093. DC A8-AF !modrm64d:        "fsubr " $4s
  1094. DC 30-77 !modrm64d:        "fdiv " $4s
  1095. DC B0-B7 !modrm64d:        "fdiv " $4s
  1096. DC 38-7F !modrm64d:        "fdivr " $4s
  1097. DC B8-BF !modrm64d:        "fdivr " $4s
  1098.  
  1099. DC C0-C7:                "fadd st, " $2[0-2]rf
  1100. DC C8-CF:                "fmul st, " $2[0-2]rf
  1101. DC E0-E7:                "fsubr st, " $2[0-2]rf
  1102. DC E8-EF:                "fsub st, " $2[0-2]rf
  1103. DC F0-F7:                "fdivr st, " $2[0-2]rf
  1104. DC F8-FF:                "fdiv st, " $2[0-2]rf
  1105.  
  1106. DD 00-47 !modrm64d:        "fld " $4s
  1107. DD 80-87 !modrm64d:        "fld " $4s
  1108. DD 10-57 !modrm64d:        "fst " $4s
  1109. DD 90-97 !modrm64d:        "fst " $4s
  1110. DD 18-5F !modrm64d:        "fstp " $4s
  1111. DD 98-9F !modrm64d:        "fstp " $4s
  1112. DD 20-67 !modrm:        "frstor " $4s
  1113. DD A0-A7 !modrm:        "frstor " $4s
  1114. DD 30-77 !modrm:        "fsave " $4s
  1115. DD B0-B7 !modrm:        "fsave " $4s
  1116. DD 38-7F !modrm16d:        "fstsw " $4s
  1117. DD B8-BF !modrm16d:        "fstsw " $4s
  1118.  
  1119. DD C0-C7:                "ffree " $2[0-2]rf
  1120. DD D0-D7:                "fst " $2[0-2]rf
  1121. DD D8-DF:                "fstp " $2[0-2]rf
  1122. DD E0-E7:                "fucom " $2[0-2]rf ", st"
  1123. DD E8-EF:                "fucomp " $2[0-2]rf
  1124.  
  1125. DE 00-47 !modrm16d:        "fiadd " $4s
  1126. DE 80-87 !modrm16d:        "fiadd " $4s
  1127. DE 08-4F !modrm16d:        "fimul " $4s
  1128. DE 88-8F !modrm16d:        "fimul " $4s
  1129. DE 10-57 !modrm16d:        "ficom " $4s
  1130. DE 90-97 !modrm16d:        "ficom " $4s
  1131. DE 18-5F !modrm16d:        "ficomp " $4s
  1132. DE 98-9F !modrm16d:        "ficomp " $4s
  1133. DE 20-67 !modrm16d:        "fisub " $4s
  1134. DE A0-A7 !modrm16d:        "fisub " $4s
  1135. DE 28-6F !modrm16d:        "fisubr " $4s
  1136. DE A8-AF !modrm16d:        "fisubr " $4s
  1137. DE 30-77 !modrm16d:        "fidiv " $4s
  1138. DE B0-B7 !modrm16d:        "fidiv " $4s
  1139. DE 38-7F !modrm16d:        "fidivr " $4s
  1140. DE B8-BF !modrm16d:        "fidivr " $4s
  1141.  
  1142. DE C0-C7:                "faddp " $2[0-2]rf ", st"
  1143. DE C8-CF:                "fmulp " $2[0-2]rf ", st"
  1144. DE D9:                    "fcompp"
  1145. DE E0-E7:                "fsubrp " $2[0-2]rf ", st"
  1146. DE E8-EF:                "fsubp " $2[0-2]rf ", st"
  1147. DE F0-F7:                "fdivrp " $2[0-2]rf ", st"
  1148. DE F8-FF:                "fdivp " $2[0-2]rf ", st"
  1149.  
  1150. DF 00-47 !modrm16d:        "fild " $4s
  1151. DF 80-87 !modrm16d:        "fild " $4s
  1152. DF 10-57 !modrm16d:        "fist " $4s
  1153. DF 90-97 !modrm16d:        "fist " $4s
  1154. DF 18-5F !modrm16d:        "fistp " $4s
  1155. DF 98-9F !modrm16d:        "fistp " $4s
  1156. DF 20-67 !modrm:        "fbld " $4s
  1157. DF A0-A7 !modrm:        "fbld " $4s
  1158. DF 28-6F !modrm64d:        "fild " $4s
  1159. DF A8-AF !modrm64d:        "fild " $4s
  1160. DF 30-77 !modrm:        "fbstp " $4s
  1161. DF B0-B7 !modrm:        "fbstp " $4s
  1162. DF 38-7F !modrm64d:        "fistp " $4s
  1163. DF B8-BF !modrm64d:        "fistp " $4s
  1164.  
  1165. DF E0:                    "fstsw ax"
  1166. DF E8-EF:                "fucomip st, " $2[0-2]rf
  1167. DF F0-F7:                "fcomip st, " $2[0-2]rf
  1168.  
  1169. E0 *:                "loopnz " $2a
  1170. E1 *:                "loopz " $2a
  1171. E2 *:                "loop " $2a
  1172. [67] E3 *:            "jcxz" $2x                    # NOTE: Yes, 67h is correct here
  1173. E3 *:                "jecxz" $2x
  1174. E4 *:                "in al, " $2x
  1175. E5 *:                "in eax, " $2x
  1176. E6 *:                "out " $2x ", al"
  1177. E7 *:                "out " $2x ", eax"
  1178.  
  1179. [67] E8 * *:        "call " $2ha
  1180. E8 * * * *:            "call " $2la
  1181. [67] E9 * *:        "jmp " $2ha
  1182. E9 * * * *:            "jmp " $2la
  1183. [67] EA * * * *:    "jmp " $4hx ":" $2hx
  1184. EA * * * * * *:        "jmp " $6hx ":" $2lx
  1185. EB *:                "jmp " $2a
  1186. EC:                    "in al, dx"
  1187. [66] ED:            "in ax, dx"
  1188. ED:                    "in eax, dx"
  1189. EE:                    "out dx, al"
  1190. [66] EF:            "out dx, ax"
  1191. EF:                    "out dx, eax"
  1192.  
  1193. F0:                    "lock"
  1194.  
  1195. F2:                    $p_f2
  1196. F3:                    $p_f3
  1197. F4:                    "hlt"
  1198. F5:                    "cmc"
  1199.  
  1200. F6 00-C7 !modrm8 *:                "test " $4s ", " $5x
  1201. F7 00-C7 !modrm32 * * * *:        "test " $4s ", " $5lx
  1202. F6 10-D7 !modrm8d:                "not " $4s
  1203. F7 10-D7 !modrm32d:                "not " $4s
  1204. F6 18-DF !modrm8d:                "neg " $4s
  1205. F7 18-DF !modrm32d:                "neg " $4s
  1206. F6 20-E7 !modrm8d:                "mul al, " $4s
  1207. [66] F7 20-E7 !modrm16d:                "mul ax, " $4s
  1208. F7 20-E7 !modrm32d:                "mul eax, " $4s
  1209. F6 28-EF !modrm8d:                "imul al, " $4s
  1210. [66] F7 28-EF !modrm16d:                "imul ax, " $4s
  1211. F7 28-EF !modrm32d:                "imul eax, " $4s
  1212. F6 30-F7 !modrm8d:                "div al, " $4s
  1213. [66] F7 30-F7 !modrm16d:                "div ax, " $4s
  1214. F7 30-F7 !modrm32d:                "div eax, " $4s
  1215. F6 38-FF !modrm8d:                "idiv al, " $4s
  1216. [66] F7 38-FF !modrm16d:                "idiv ax, " $4s
  1217. F7 38-FF !modrm32d:                "idiv eax, " $4s
  1218.  
  1219. F8:                    "clc"
  1220. F9:                    "stc"
  1221. FA:                    "cli"
  1222. FB:                    "sti"
  1223. FC:                    "cld"
  1224. FD:                    "std"
  1225.  
  1226. FE 00-C7 !modrm8d:        "inc " $4s
  1227. FF 00-C7 !modrm1632d:    "inc " $4s
  1228. FE 08-CF !modrm8d:        "dec " $4s
  1229. FF 08-CF !modrm1632d:    "dec " $4s
  1230. FF 10-D7 !modrm32d:        "call " $4s
  1231. FF 18-DF !modrm48d:        "call " $4s
  1232. FF 20-E7 !modrm32d:        "jmp " $4s
  1233. FF 28-EF !modrm48d:        "jmp " $4s
  1234. FF 30-F7 !modrm1632d:    "push " $4s
  1235.  
  1236.  
  1237. *:                    "db " $1x
  1238.